/*	Masked Input plugin for jQuery
	Copyright (c) 2007-2011 Josh Bush (digitalbush.com)
	Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
	Version: 1.3
*/
(function(a){
    var b=(a.browser.msie?"paste":"input")+".mask",c=window.orientation!=undefined;
    a.mask={
        definitions:{
            9:"[0-9]",
            a:"[A-Za-z]",
            "*":"[A-Za-z0-9]"
        },
        dataName:"rawMaskFn"
    },a.fn.extend({
        caret:function(a,b){
            if(this.length!=0){
                if(typeof a=="number"){
                    b=typeof b=="number"?b:a;
                    return this.each(function(){
                        if(this.setSelectionRange)this.setSelectionRange(a,b);
                        else if(this.createTextRange){
                            var c=this.createTextRange();
                            c.collapse(!0),c.moveEnd("character",b),c.moveStart("character",a),c.select()
                        }
                    })
                }
                if(this[0].setSelectionRange)a=this[0].selectionStart,b=this[0].selectionEnd;
                else if(document.selection&&document.selection.createRange){
                    var c=document.selection.createRange();
                    a=0-c.duplicate().moveStart("character",-1e5),b=a+c.text.length
                }
                return{
                    begin:a,
                    end:b
                }
            }
        },
        unmask:function(){
            return this.trigger("unmask")
        },
        mask:function(d,e){
            if(!d&&this.length>0){
                var f=a(this[0]);
                return f.data(a.mask.dataName)()
            }
            e=a.extend({
                placeholder:"_",
                completed:null
            },e);
            var g=a.mask.definitions,h=[],i=d.length,j=null,k=d.length;
            a.each(d.split(""),function(a,b){
                b=="?"?(k--,i=a):g[b]?(h.push(new RegExp(g[b])),j==null&&(j=h.length-1)):h.push(null)
            });
            return this.trigger("unmask").each(function(){
                function v(a){
                    var b=f.val(),c=-1;
                    for(var d=0,g=0;d<k;d++)if(h[d]){
                        l[d]=e.placeholder;
                        while(g++<b.length){
                            var m=b.charAt(g-1);
                            if(h[d].test(m)){
                                l[d]=m,c=d;
                                break
                            }
                        }
                        if(g>b.length)break
                    }else l[d]==b.charAt(g)&&d!=i&&(g++,c=d);if(!a&&c+1<i)f.val(""),t(0,k);
                    else if(a||c+1>=i)u(),a||f.val(f.val().substring(0,c+1));
                    return i?d:j
                }
                function u(){
                    return f.val(l.join("")).val()
                }
                function t(a,b){
                    for(var c=a;c<b&&c<k;c++)h[c]&&(l[c]=e.placeholder)
                }
                function s(a){
                    var b=a.which,c=f.caret();
                    if(a.ctrlKey||a.altKey||a.metaKey||b<32)return!0;
                    if(b){
                        c.end-c.begin!=0&&(t(c.begin,c.end),p(c.begin,c.end-1));
                        var d=n(c.begin-1);
                        if(d<k){
                            var g=String.fromCharCode(b);
                            if(h[d].test(g)){
                                q(d),l[d]=g,u();
                                var i=n(d);
                                f.caret(i),e.completed&&i>=k&&e.completed.call(f)
                            }
                        }
                        return!1
                    }
                }
                function r(a){
                    var b=a.which;
                    if(b==8||b==46||c&&b==127){
                        var d=f.caret(),e=d.begin,g=d.end;
                        g-e==0&&(e=b!=46?o(e):g=n(e-1),g=b==46?n(g):g),t(e,g),p(e,g-1);
                        return!1
                    }
                    if(b==27){
                        f.val(m),f.caret(0,v());
                        return!1
                    }
                }
                function q(a){
                    for(var b=a,c=e.placeholder;b<k;b++)if(h[b]){
                        var d=n(b),f=l[b];
                        l[b]=c;
                        if(d<k&&h[d].test(f))c=f;else break
                    }
                }
                function p(a,b){
                    if(!(a<0)){
                        for(var c=a,d=n(b);c<k;c++)if(h[c]){
                            if(d<k&&h[c].test(l[d]))l[c]=l[d],l[d]=e.placeholder;else break;
                            d=n(d)
                        }
                        u(),f.caret(Math.max(j,a))
                    }
                }
                function o(a){
                    while(--a>=0&&!h[a]);
                    return a
                }
                function n(a){
                    while(++a<=k&&!h[a]);
                    return a
                }
                var f=a(this),l=a.map(d.split(""),function(a,b){
                    if(a!="?")return g[a]?e.placeholder:a
                }),m=f.val();
                f.data(a.mask.dataName,function(){
                    return a.map(l,function(a,b){
                        return h[b]&&a!=e.placeholder?a:null
                    }).join("")
                }),f.attr("readonly")||f.one("unmask",function(){
                    f.unbind(".mask").removeData(a.mask.dataName)
                }).bind("focus.mask",function(){
                    m=f.val();
                    var b=v();
                    u();
                    var c=function(){
                        b==d.length?f.caret(0,b):f.caret(b)
                    };
                    (a.browser.msie?c:function(){
                        setTimeout(c,0)
                    })()
                }).bind("blur.mask",function(){
                    v(),f.val()!=m&&f.change()
                }).bind("keydown.mask",r).bind("keypress.mask",s).bind(b,function(){
                    setTimeout(function(){
                        f.caret(v(!0))
                    },0)
                }),v()
            })
        }
    })
})(jQuery)